require(plotly)
require(tidyverse); theme_set(theme_bw())
require(lubridate)
require(ggrepel)
require(patchwork)
require(ggsflabel)
# 1. Introducción ------------------
source(file.path('src', 'data', '901_funcionesMapa.R'), encoding = 'UTF-8')
## Loading required package: sf
## Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
source(file.path('src', 'models', '900_funcionesAlmacenamientoGrafico.R'), encoding = 'UTF-8')
source(file.path('src', 'visualization', '900_funcionExtraccionDummies.R'), encoding = 'UTF-8')
source(file.path('src', 'visualization', '901_funcionesBarras.R'), encoding = 'UTF-8')
df_DIVIPOLA <-
read_csv(file.path('.', 'data', 'processed', '798_DANE_DEPARTAMENTO.csv'))
## Rows: 33 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): NombreDepartamento
## dbl (1): CodigoDepartamento
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
df_MUNICIPIO <-
read_csv(file.path('data', 'processed', '799_DANE_DIVIPOLA.csv'),
locale = locale(encoding = 'latin1'))
## Rows: 1121 Columns: 7
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (4): CODIGO_DEPARTAMENTO, NOMBRE_DEPARTAMENTO, NOMBRE_MUNICIPIO, TIPO
## dbl (3): CODIGO_MUNICIPIO, LATITUD, LONGITUD
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
df <- read_csv(file.path('data', 'processed', '001_Herramienta_Procesada.csv'),
na = c('N/A', 'No aplica', 'NA'))
## Rows: 16 Columns: 184
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (157): Nombre del encuestador, Nombre del funcionario que recibe la enc...
## dbl (16): 3.01 Existencias actuales de recetarios en el FRE, 3.03 Tiempo d...
## lgl (8): Si la respuesta a la pregunta anterior fue "otro", indique cual:...
## dttm (3): Marca temporal, Fecha de la visita, Fecha creación FRE
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
df
## # A tibble: 16 x 184
## `Marca temporal` `Nombre del encue~ `Nombre del funci~ `Nombre del funcio~
## <dttm> <chr> <chr> <chr>
## 1 2021-05-08 15:55:12 Carlos Guillermo ~ Heliodoro Kerguel~ Erick Novoa
## 2 2021-05-10 08:38:47 Wilder Estiben Me~ Jovana Vitola Jul~ Leidy Llorente Vil~
## 3 2021-05-10 12:03:39 Carlos Guillermo ~ Paola Andrea Góme~ <NA>
## 4 2021-05-21 15:23:40 Wilder Estiben Me~ Rafael Tapia Buen~ <NA>
## 5 2021-05-23 15:36:50 Carlos Guillermo ~ Maria Eugenia Bar~ <NA>
## 6 2021-05-25 21:56:53 Jhonathan Venegas Amilcar Marquez <NA>
## 7 2021-05-26 11:17:20 Nicolás Alexander~ Diana Carolina Va~ Edimer Covaleda Yu~
## 8 2021-05-26 11:59:27 Nicolás Alexander~ Julieta Palacios ~ Jonathan Sánchez M~
## 9 2021-05-26 13:01:15 Nicolás Alexander~ Marly Julieth Esp~ <NA>
## 10 2021-05-28 12:07:29 Wilder Estiben Me~ Adriana María Mur~ <NA>
## 11 2021-05-28 12:41:31 Jhonathan Felipe ~ Sara Bacares Pilar Pacheco
## 12 2021-05-29 06:33:30 Jhonathan Felipe ~ Andrea Porras <NA>
## 13 2021-06-23 13:49:25 Nicolás Alexander~ Juan Pablo Arias Leonor Del Carmen ~
## 14 2021-07-07 17:08:47 Carlos Guillermo ~ Juan David Apraez <NA>
## 15 2021-07-08 11:26:23 Wilder Estiben Me~ Andrés Alexander ~ <NA>
## 16 2021-07-08 11:39:27 Jhonathan Venegas Silvia Espitia Ve~ Greici Castilla
## # ... with 180 more variables: Fecha de la visita <dttm>, Departamento <chr>,
## # Ciudad <chr>, Dirección <chr>, E-mail <chr>, Telefono <chr>,
## # Acto administrativo de creación <chr>, Fecha creación FRE <dttm>,
## # Nombre del Secretario de Salud <chr>, Nombre del Gobernador <chr>,
## # Nombre del funcionario a cargo del FRE <chr>,
## # Profesión del funcionario a cargo del FRE <chr>,
## # Si la respuesta a la pregunta anterior fue "otro", indique cual:...17 <chr>, ...
# 4.01. ¿Con cuales herramientas cuenta el FRE para el manejo de inventarios?-------
col1 <- '4.01. ¿Con cuales herramientas cuenta el FRE para el manejo de inventarios?'
col2 <- 'Si seleccionó paquete ofimático o software, especifique cuál...94'
ggHerramientas1 <- pull(df, col1) %>%
separarDummies(.) %>%
pivot_longer(cols = everything()) %>%
group_by(name) %>%
summarise(
conteo = sum(value, na.rm = TRUE),
propor = conteo/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = name, x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.8, size = 4) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción') +
labs(title = 'Herramientas para el manejo de inventarios') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
## Warning: The `x` argument of `as_tibble.matrix()` must have unique column names if `.name_repair` is omitted as of tibble 2.0.0.
## Using compatibility `.name_repair`.
ggHerramientas1

guardarGGplot(ggHerramientas1, '071_Herramienta', 7, 5)
ggHerramientas2 <- pull(df, col2) %>%
{ifelse(is.na(.), pull(df, col1), pull(df, col2))} %>%
separarDummies() %>%
pivot_longer(cols = everything()) %>%
mutate(name = str_replace(name, 'Paquete ofimático', 'Excel')) %>%
group_by(name) %>%
summarise(
conteo = sum(value, na.rm = TRUE),
propor = conteo/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.8, size = 4) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción') +
labs(title = 'Herramientas para el manejo de inventarios') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggHerramientas2

guardarGGplot(ggHerramientas2, '072_Herramienta', 7, 5)
# 4.02. ¿Qué herramienta usa el FRE para la consolidación de anexos -----------
# de la Resolución 1479 de 2006?
col1 <- '4.02. ¿Qué herramienta usa el FRE para la consolidación de anexos de la Resolución 1479 de 2006?'
col2 <- 'Si seleccionó paquete ofimático o software, especifique cuál...96'
#### REVISION
ggHerrConsolidacion <- pull(df, col2) %>%
{ifelse(is.na(.), pull(df, col1), pull(df, col2))} %>%
separarDummies() %>%
pivot_longer(cols = everything()) %>%
mutate(name = str_replace(name, 'Paquete ofimático', 'Excel')) %>%
group_by(name) %>%
summarise(
conteo = sum(value, na.rm = TRUE),
propor = conteo/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
mutate(name = str_wrap(name, 25)) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.8, size = 4) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción') +
labs(title = 'Herramientas diligenciamiento Res 1479/2006') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggHerrConsolidacion

guardarGGplot(ggHerrConsolidacion, '073_HerramientaConsol', 7, 5)
# 4.03. ¿Qué medios utiliza de manera frecuente para la ------------------
# comunicación con sus clientes?
col1 <- "4.03. ¿Qué medios utiliza de manera frecuente para la comunicación con sus clientes?"
ggMediosComunicacion <- pull(df, col1) %>%
separarDummies(.) %>%
pivot_longer(cols = everything()) %>%
group_by(name) %>%
summarise(
conteo = sum(value, na.rm = TRUE),
propor = conteo/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.2, size = 3) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción') +
labs(title = 'Canales de comunicación FRE') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggMediosComunicacion

guardarGGplot(ggMediosComunicacion, '074_MediosComunicacion', 7, 5)
# 4.04. ¿Cómo puntuaría la velocidad de conexión de su internet? ------------------
col1 <- "4.04. ¿Cómo puntuaría la velocidad de conexión de su internet?"
escala1 <- c('Excelente', 'Buena', 'Mala', 'Muy mala')
ggConexionInternet <- pull(df, col1) %>%
table() %>% as_tibble() %>%
mutate(Fct = factor(., escala1)) %>%
ggplot(aes(y = Fct, x = n)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = n), hjust = -0.5, size = 4) +
coord_cartesian(xlim = c(0, 12)) +
# scale_x_continuous(labels = scales::percent_format()) +
xlab('Frecuencia') +
labs(title = 'Velocidad de conexión de Internet') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggConexionInternet

guardarGGplot(ggConexionInternet, '075_ConexionInternet', 7, 5)
col1 <- "4.05. ¿Cuántos equipos de cómputo tiene el FRE para el desarrollo de sus actividades?"
ggEquiposComputo <- pull(df, col1) %>%
table() %>% as_tibble() %>%
mutate(Equipos = as.double(.)) %>%
ggplot(aes(x = Equipos, y = n)) +
geom_line() +
geom_point(size = 2) +
geom_text(aes(label = n), vjust = -0.9) +
xlab('N.° de equipos') +
ylab('Frecuencia') +
coord_cartesian(ylim = c(0, 7)) +
labs(title = 'N.° de equipos de computo en el FRE') +
theme(panel.grid = element_blank())
ggEquiposComputo

guardarGGplot(ggEquiposComputo, '076_EquiposComputo', 6, 4)
Relación entre el número de personas (disponibilidad de recurso humano) y equipos de computo presente en las instalaciones del FRE
df_total <- df %>% rowwise() %>%
mutate(Profesiones = list(c_across(matches('Profesión\\sdel\\s(personal|funcionario)'))))
df_total$NoPersonas <- df_total$Profesiones %>%
map_dbl(function(x){sum(!is.na(x))})
# Se realiza una copia de reserva
df_total1 <- df_total
ggCorrelacionEquipos <- df_total %>%
rename(NoEquipos = col1) %>%
mutate(Departamento_1 = str_to_title(Departamento_1)) %>%
drop_na(NoEquipos) %>%
ggplot(aes(y = NoEquipos, x = NoPersonas)) +
stat_smooth(se = F, method = 'lm', lty = 'dashed', col = 'black') +
geom_point(col = 'blue') +
geom_label_repel(aes(label = Departamento_1), size=2) +
xlab('N.° de personas') +
ylab('N.° de equipos') +
labs(title = 'Correlación entre personas y equipos') +
theme(panel.grid = element_blank())
## Note: Using an external vector in selections is ambiguous.
## i Use `all_of(col1)` instead of `col1` to silence this message.
## i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
ggCorrelacionEquipos
## `geom_smooth()` using formula 'y ~ x'

guardarGGplot(ggCorrelacionEquipos, '077_CorrEquiposComputo', 6, 4)
## Warning: One or more parsing issues, see `problems()` for details
## `geom_smooth()` using formula 'y ~ x'
# 4.06. Los equipos de cómputo disponibles son: ------------------
col1 <- '4.06. Los equipos de cómputo disponibles son:'
ggOpinionEquipos <- pull(df, col1) %>%
separarDummies() %>%
pivot_longer(cols = everything()) %>%
mutate(name = str_replace(name, 'Paquete ofimático', 'Excel')) %>%
group_by(name) %>%
summarise(
conteo = sum(value, na.rm = TRUE),
propor = conteo/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
mutate(name = str_to_sentence(name) %>% str_wrap(30)) %>%
ggplot(aes(y = fct_reorder(name, conteo), x = conteo)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.8, size = 4) +
xlab('Proporción (%)') +
labs(title = 'Opinión sobre los equipos de cómputo') +
coord_cartesian(xlim = c(0, 10)) +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggOpinionEquipos

guardarGGplot(ggOpinionEquipos, '078_OpinionEquipos', 6, 4)
| Gráfico de torta |
| @param data_frame @param nvar @param textvar |
| @return @export |
| @examples |
| ```r pieChart <- function(data_frame, nvar, textvar){ data_frame %>% arrange(desc({{textvar}})) %>% mutate(prop = {{nvar}} / sum({{nvar}}), ncumsum = cumsum(prop) - 0.5 * prop) %>% ggplot(aes(x = ““, y = prop, fill = {{textvar}})) + geom_bar(stat=”identity”, width=1) + coord_polar(“y”, start=0) + theme_void() + theme(legend.position=“bottom”) + geom_text(aes(y = ncumsum, label = {{textvar}}), color = “white”, size=4) } |
| col1 <- “4.12. ¿Qué herramienta utiliza el FRE para realizar la estimación de compra de MME?” |
| ggHerramientasCompras <- pull(df, col1) %>% table() %>% as_tibble() %>% rename(label = ‘.’) %>% mutate(prop = n / sum(n), label1 = paste0(label, ‘’, n, ’ - ’, round(prop, 3)*100, ‘%’)) %>% pieChart(n, label1) + scale_fill_brewer(palette = ‘Set1’) + theme(legend.position = ‘none’) |
| ggHerramientasCompras ``` |
 |
r guardarGGplot(ggHerramientasCompras, '079_HerramientasCompras', 6, 4) |
# Evaluación de tiempos de etapas de compra ------------------
col1 <- "4.13. ¿Cuánto tiempo toma la etapa de estimación de la necesidad de compra de MME (en días)?"
col2 <- "4.14. ¿Cuánto tiempo toma la etapa precontractual para la compra de MME? (en semanas)"
col3 <- "4.15. ¿Cuánto tiempo toma la etapa contractual para la compra de MME? (en semanas)"
col4 <- "4.16. ¿Cuánto tiempo toma la solicitud en plataforma tecnológica? (en días)"
col5 <- "4.17. ¿Cuánto tiempo toma el despacho de los MME? (en días)"
col6 <- "4.18. ¿Cuánto tiempo transcurre en el caso de traslados desde otros departamentos desde la solicitud hasta el despacho? (en días)"
tiempos_df <- data.frame(
T1 = pull(df, col1),
T2 = pull(df, col2),
T3 = pull(df, col3),
T4 = pull(df, col4),
T5 = pull(df, col5)
) %>%
mutate(T2 = T2 * 7,
T3 = T3 * 7)
df_total <- df %>% cbind(tiempos_df) %>%
as_tibble() %>%
pivot_longer(cols = matches('T[1-5]')) %>%
group_by(Departamento_1) %>%
mutate(T_total = sum(value, na.rm = T),
Departamento_1 = str_to_sentence(Departamento_1),
name = factor(name, rev(paste0('T', 1:5))))
nombresCorrectos <- c('Estimación', 'Precontractual',
'Contractual', 'Solicitud Plataforma', 'Despacho')
ggProcesosAdquisicion <- df_total %>%
ggplot(aes(x = value, y = fct_reorder(Departamento_1, T_total), group = name)) +
geom_bar(stat = 'identity', position = 'stack', aes(fill = name)) +
geom_text(aes(label = value), size = 3, position = position_stack(vjust = 0.5)) +
scale_fill_brewer(
labels = rev(nombresCorrectos),
palette = 'Set3',
name = 'Etapa') +
xlab('Tiempo (días)') +
theme(axis.title.y = element_blank(),
legend.position = 'bottom') +
labs(title = 'Seguimiento de Procesos de adquisición')
ggProcesosAdquisicion
## Warning: Removed 5 rows containing missing values (position_stack).
## Warning: Removed 5 rows containing missing values (position_stack).

guardarGGplot(ggProcesosAdquisicion, '080_ProcesosAdquisición', 12, 7)
## Warning: Removed 5 rows containing missing values (position_stack).
## Warning: Removed 5 rows containing missing values (position_stack).
plotlyProcesosAdquisicion <- df_total %>%
mutate(Etapa1 = as.numeric(str_sub(name, -1)) %>% map_chr(~nombresCorrectos[.x])) %>%
plot_ly(
type = 'bar',
x = ~value,
y = ~fct_reorder(Departamento_1, T_total),
color = ~Etapa1
) %>%
layout(yaxis = list(title = NA),
xaxis = list(title = 'Tiempo (días)'),
barmode = 'stack') %>%
config(displaylogo = FALSE, displayModeBar=F)
plotlyProcesosAdquisicion
## Warning: Ignoring 5 observations
guardarPlotly(plotlyProcesosAdquisicion, '081_ProcesosAdquisición', 12, 7,
libdir = 'plotly')
## Warning: Ignoring 5 observations
ggProcesosAdquisicion1 <- df_total %>%
# mutate(map(name, function(x) x))
ggplot(aes(x = value, y = fct_reorder(Departamento_1, T_total), group = name)) +
geom_bar(stat = 'identity', aes(fill = name)) +
geom_text(aes(label = value), size = 3, hjust = -0.5) +
scale_fill_discrete(
labels = rev(c('Estimación', 'Precontractual', 'Contractual', 'Solicitud Plataforma', 'Despacho')),
name = 'Etapa') +
xlab('Tiempo (días)') +
facet_wrap(vars(name)) +
theme(axis.title.y = element_blank(),
legend.position = 'bottom') +
labs(title = 'Seguimiento de Procesos de adquisición')
ggProcesosAdquisicion1
## Warning: Removed 5 rows containing missing values (position_stack).
## Warning: Removed 5 rows containing missing values (geom_text).

guardarGGplot(ggProcesosAdquisicion1, '082_ProcesosAdquisición', 8, 6)
## Warning: Removed 5 rows containing missing values (position_stack).
## Warning: Removed 5 rows containing missing values (geom_text).
# Proceso de translados interdepartamentales ------------------
ggTiemposTraslados <- df %>%
select(Tiempo = col6, Departamento_1) %>%
drop_na() %>%
mutate(Departamento_1 = str_to_title(Departamento_1)) %>%
ggplot(aes(x = Tiempo, y = fct_reorder(Departamento_1, Tiempo))) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = Tiempo), hjust = -0.5) +
coord_cartesian(xlim = c(0, 8)) +
xlab('Tiempo (días)') +
labs(title = 'Tiempos en translados interdepartamentales') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
## Note: Using an external vector in selections is ambiguous.
## i Use `all_of(col6)` instead of `col6` to silence this message.
## i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
ggTiemposTraslados

guardarGGplot(ggTiemposTraslados, '083_TiemposTranslados', 6, 4)
ggTiemposTraslados1 <- df %>%
rename(Tiempo = col6) %>%
left_join(colombiaGeoDF, by = c('CodigoDepartamento' = 'DPTO')) %>%
mutate(
Departamento_1 = str_to_title(Departamento_1),
label1 = ifelse(
!is.na(Tiempo),
paste0(Departamento_1, '\n', Tiempo, ' días'),
NA_character_
)
) %>%
ggplot() +
geom_sf(aes(geometry = geometry, fill = Tiempo)) +
geom_sf_label_repel(aes(label = label1), size = 3) +
labs(title = 'Tiempos para traslados interdepartamentales') +
scale_fill_gradientn(colours = colorspace::heat_hcl(7)) +
theme(
axis.text = element_blank(),
axis.title = element_blank(),
panel.grid = element_blank()
)
ggTiemposTraslados1
## Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning: Removed 7 rows containing missing values (geom_label_repel).

guardarGGplot(ggTiemposTraslados1, '084_TiemposTranslados', 8,6)
## Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(data$geometry): Removed 7 rows containing
## missing values (geom_label_repel).
rm(list = ls(pattern = '^col'))
col1 <- "4.19. ¿Qué tan conforme se encuentra el FRE con la plataforma Colombia Compra Eficiente?"
col2 <- "4.20. Justifique la respuesta a la pregunta 4.19"
escala1 <- c('Muy inconforme', 'Algo inconforme', 'Ni conforme ni inconforme',
'Algo conforme', 'Muy conforme')
ggCompraEficiente <- select(df, Escala = col1) %>%
mutate(Escala = factor(Escala, level = escala1)) %>%
ggplot(aes(y = Escala)) +
geom_bar(stat = 'count', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = ..count..), stat = 'count', hjust = -0.8) +
coord_cartesian(xlim = c(0, 8)) +
xlab('Frecuencia') +
theme(axis.title.y = element_blank(),
legend.position = 'bottom') +
labs(title = 'Conformidad con plataforma Colombia Compra Eficiente')
ggCompraEficiente

guardarGGplot(ggCompraEficiente, '085_ConformidadColombiaCompra', 8, 6)
df %>%
select(Deptmn = Departamento_1,
Escala = col1,
Justif = col2) %>%
mutate(
Escala = factor(Escala, levels = escala1),
Deptmn = str_to_title(Deptmn)) %>%
arrange(Escala) %>%
gt::gt(groupname_col = 'Escala') %>%
gt::tab_options(table.font.size = 9)
## Note: Using an external vector in selections is ambiguous.
## i Use `all_of(col2)` instead of `col2` to silence this message.
## i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This message is displayed once per session.
| Deptmn |
Justif |
| Muy inconforme |
| Bolívar |
No les han llegado los pedidos que requieren. No tienen claridad acerca del uso de la plataforma. Aseguran que la contratación directa, como se realizaba antiguamente era más rápida y segura. Manifiesta que se debe afirmar la herramienta para que sea mas rápida y eficiente. |
| Norte De Santander |
No entienden bien el proceso porque no lo manejan. |
| Algo inconforme |
| Casanare |
Implementación de la plataforma en el FRE fue un proceso muy complejo y demorado. No hubo explicación detallada del proceso. Las actualizaciones de la plataforma no se ajustan con el sistema operativo de los equipos del FRE.
La liberación presupuestal de la Gobernación de Casanare presenta problemas con el proceso de la plataforma, por razones legales. Por lo tanto, lo más complejo fue conectar los procesos jurídicos con la plataforma “Colombia compra eficiente”. |
| Tolima |
Es una herramienta poco eficiente y el FRE Tolima percibe un atraso en los procesos de abastecimiento de MME por parte de la UAE FNE. |
| Putumayo |
Pese a que tuvieron algunos problemas con la compra de MME a través de la plataforma el encargado del FRE manifiesta que es eficiente y con la ayuda del soporte técnico de la plataforma pudo concretar la orden de compra. |
| Ni conforme ni inconforme |
| Atlántico |
Anteriormente, se hacía directamente (es decir, el FRE realizaba la compra por la plataforma), pero el proceso paso a ser centralizado en la Secretaría y los tiempos para la adquisición de medicamentos son muchos mayores a los que se hacían anteriormente. El FRE aclara que esto ha generado retrasos y contratiempos en estos procesos. En el 2020 se comenzó una compra en marzo, pero terminó realizándose en agosto. En septiembre se realizó otra y se terminó completando en enero del 2021. En conclusión, no se sabe si los tiempos de demora corresponden a problemas con la plataforma o retrasos internos de la Secretaría. |
| Antioquia |
La directora del FRE de Antioquia manifiesta que en la plataforma no esta en problema central de la adquisición de MME sino que los inconvenientes centrales radican en la baja disponibilidad de productos y los largos tiempos de espera en el proceso de compra de medicamentos. |
| Guaviare |
Personal del FRE estaba acostumbrado al proceso realizado anteriormente. Al principio de la implementación de la plataforma Colombia Compra Eficiente estaban en desacuerdo por que el personal que maneja la plataforma no sabía cómo usarla. Actualmente, no tienen opiniones por que el personal del FRE no maneja esta plataforma. |
| Algo conforme |
| Huila |
FRE Huila fue de los primeros entes territoriales que realizaron compra por Colombia Compra Eficiente. Otros entes territoriales acudían al FRE Huila para solicitar ayuda. No obstante, al inicio de la implementación de la plataforma, estaban inconformes por las pocas capacitaciones que se hicieron. |
| Muy conforme |
| Córdoba |
El proceso no tarda mas de 15 minutos para realizar la compra, es veloz y eficaz. |
| Magdalena |
Debido a la agilidad del proceso puesto que antes era muy demorado. |
| Quindío |
Por la transparencia y porque se ha tornado mucho más fácil la compra de medicamentos, además es raído. Las demoras vienen son en los procesos administrativos que están ligadas a esta actividad. |
| Boyacá |
No han tenido problemas |
| Valle Del Cauca |
Persona a cargo no conoce los procedimientos |
| Nariño |
Debido a la agilidad en los procesos de compra, puesto que antes se demoraban 4 meses realizando dicha acción, ahora, tarda por mucho un mes. Se sugiere seguir realizando las compras por esta plataforma de forma indefinida. |
| Cauca |
No hay queja alguna |
# 4.22. ¿Cuánto tiempo se emplea para la recepción y almacenamiento --------------
# de los medicamentos? (en días)
colombiaGeoDF <- read_sf(file.path('data', 'external', 'colombia_geo.json'))
col1 <- "4.22. ¿Cuánto tiempo se emplea para la recepción y almacenamiento de los medicamentos? (en días)"
ggRecepcion <- df %>%
rename(tiempoRecepcion = col1) %>%
drop_na(tiempoRecepcion) %>%
mutate(Departamento_1 = str_to_title(Departamento_1)) %>%
ggplot(aes(x = tiempoRecepcion,
y = fct_reorder(Departamento_1, tiempoRecepcion))) +
geom_bar(stat = 'identity',fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = tiempoRecepcion), hjust = -0.8) +
xlab('Tiempo de recepción (días)') +
coord_cartesian(xlim = c(0, 9)) +
theme(axis.title.y = element_blank(),
panel.grid = element_blank(),
legend.position = 'bottom') +
labs(title = 'Tiempos en recepción y almacenamiento de medicamentos')
ggRecepcion

guardarGGplot(ggRecepcion, '086_RecepcionMedicamento', 8, 6)
ggTiempoRecepcionMedicamentos <- df %>%
right_join(colombiaGeoDF, by = c('CodigoDepartamento' = 'DPTO')) %>%
rename(tiempoRecepcion = col1) %>%
# drop_na(tiempoRecepcion) %>%
ggplot() +
geom_sf(aes(fill = tiempoRecepcion, geometry = geometry)) +
scale_fill_gradientn(colours = colorspace::heat_hcl(7)) +
theme(axis.title.y = element_blank(),
legend.position = 'bottom',
axis.text = element_blank()) +
labs(title = 'Tiempo de recepción de medicamentos') +
guides(
fill = guide_colourbar(barwidth = 20, title.position = 'top', title = 'Demora (días)'))
ggTiempoRecepcionMedicamentos

guardarGGplot(ggTiempoRecepcionMedicamentos, '087_RecepcionMedicamento', 8, 6)
# 4.31. ¿Qué controles se tienen para limitar el acceso de medicamentos al personal? ------------------
col1 <- "4.31. ¿Qué controles se tienen para limitar el acceso de medicamentos al personal?"
col2 <- "Si la respuesta anterior fue otro, indique cual...116"
textoLargo <- "Procedimientos para el manejo de personal huésped, visitantes, mantenimiento o no empleados del FRE"
xDF <- pull(df, col2) %>%
is.na() %>%
ifelse(pull(df, col1),
paste(pull(df, col1), pull(df, col2), sep = ',')) %>%
separarDummies(.)
# Existe una columna que quedó separa pese a que proviene del mismo factor
ggSeguridadMedicamentos <- xDF %>%
select(!colnames(xDF)[9:11]) %>%
mutate({{textoLargo}} := apply(xDF[,colnames(xDF)[9:11]], 1, sum) %>% as.logical()) %>%
# select(!Otro) %>%
pivot_longer(cols = everything()) %>%
mutate(
name = str_wrap(name, 30),
name = str_replace(name, 'almaceamiento', 'verificación'),
name = str_replace(name, 'institciones', 'instituciones')) %>%
group_by(name) %>%
summarise(
conteo = sum(value),
propor = sum(value)/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.3, size = 3) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción (%)') +
labs(title = 'Medidas de seguridad en almacenamiento de MME') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggSeguridadMedicamentos

guardarGGplot(ggSeguridadMedicamentos, '088_SeguridadMedicamentos', 8, 6)
# 4.32. ¿Con que frecuencia se revisan las condiciones ambientales -------------
# en el lugar de almacenamiento de los medicamentos?
col1 <- "4.32. ¿Con que frecuencia se revisan las condiciones ambientales en el lugar de almacenamiento de los medicamentos?"
etiquetasFrecuencia <- c('Diaria', 'Dos veces al día', 'Dos veces a la semana',
'Tres veces a la semana', 'Una vez a la semana',
'Cada mes',
'No se revisan condiciones\nambientales')
ggFrecCondiciones <- pull(df, col1) %>%
table() %>% as_tibble() %>%
rename(Frec = '.') %>%
add_row(Frec = etiquetasFrecuencia[3], n = 0) %>%
add_row(Frec = etiquetasFrecuencia[4], n = 0) %>%
add_row(Frec = etiquetasFrecuencia[5], n = 0) %>%
add_row(Frec = etiquetasFrecuencia[6], n = 0) %>%
mutate(Frec = str_wrap(Frec, 30),
Frec = factor(Frec, levels = rev(etiquetasFrecuencia))) %>%
ggplot(aes(y = Frec, x = n)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
labs(title = 'Frec. de revisión de condiciones ambientales') +
geom_text(aes(label = n), hjust = -0.6, size = 4) +
coord_cartesian(xlim = c(0, 10)) +
xlab("Frecuencia") +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggFrecCondiciones

guardarGGplot(ggFrecCondiciones, '089_FrecuenciaRevisionCondiciones', 6, 4)
# 4.33. ¿Qué equipo o tecnología se utiliza para el control y ------------------
# seguimiento de condiciones ambientales?
col1 <- "4.33. ¿Qué equipo o tecnología se utiliza para el control y seguimiento de condiciones ambientales?"
ggMetodosControlAmb <- pull(df, col1) %>%
separarDummies(.) %>%
pivot_longer(cols = everything()) %>%
mutate(
name = str_wrap(name, 30),
name = str_replace(name, 'almaceamiento', 'verificación'),
name = str_replace(name, 'institciones', 'instituciones')) %>%
group_by(name) %>%
summarise(
conteo = sum(value),
propor = sum(value)/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.3, size = 3) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción (%)') +
labs(title = 'Tecnologías de control y seguimiento de condiciones ambientales') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggMetodosControlAmb

guardarGGplot(ggMetodosControlAmb, '090_MetodoSeguimControlAmb', 6, 4)
# 4.34. ¿Cada cuánto se hace la calibración y mantenimiento de los equipos? ------------------
col1 <- "4.34. ¿Cada cuánto se hace la calibración y mantenimiento de los equipos?"
calibMant <- c("Entre 1 a 3 meses",
"Entre 3 a 6 meses",
"Entre 6 a 9 meses",
"Entre 9 a 12 meses",
"En periodos mayores a 12 meses",
"No se realiza")
ggCalibMant <- select(df, col1 = col1) %>%
mutate(col1 = factor(col1, calibMant)) %>%
ggplot(aes(y = col1)) +
geom_bar(stat = 'count', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = ..count..), stat='count', hjust = -0.8, size = 4) +
xlab('Frecuencia') +
scale_y_discrete(drop = FALSE) +
coord_cartesian(xlim = c(0, 13)) +
labs(title = "Frecuencia de calibración/mantenimiento equipos") +
theme(axis.title.y = element_blank())
ggCalibMant

guardarGGplot(ggCalibMant, '091_FrecSeguimientoCalibracion', 6, 4)
# 4.36. ¿Con que otros medicamentos o productos se comparten los ----------------
# MME en el almacén?
col1 <- "4.36. ¿Con que otros medicamentos o productos se comparten los MME en el almacén?"
ggOtrosProductos <- pull(df, col1) %>%
separarDummies() %>%
select(-2) %>%
pivot_longer(cols = everything()) %>%
mutate(
name = str_wrap(name, 30),
name = str_replace(name, 'almaceamiento', 'verificación'),
name = str_replace(name, 'institciones', 'instituciones')) %>%
group_by(name) %>%
summarise(
conteo = sum(value),
propor = sum(value)/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.3, size = 3) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción (%)') +
labs(title = 'Tecnologías de control y seguimiento de condiciones ambientales') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggOtrosProductos

guardarGGplot(ggOtrosProductos, '092_ProductosCompartidos', 8, 6)
# 4.38. ¿Qué tan conforme se encuentra el FRE el transporte de ------------------
# los MME desde el FNE?
col1 <- "4.38. ¿Qué tan conforme se encuentra el FRE el transporte de los MME desde el FNE?"
col2 <- "4.39. Justifique la respuesta a la pregunta 4.38."
escalaLikert <- c("Muy incoforme", "Algo inconforme",
"Ni conforme ni inconforme",
"Algo conforme", "Muy conforme")
ggTransporte <- select(df, likert = col1) %>%
mutate(likert = factor(likert, levels = escalaLikert)) %>%
ggplot(aes(y = likert)) +
geom_bar(stat = 'count', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = ..count..), stat = 'count', hjust = -0.5) +
xlab('Frecuencia') +
coord_cartesian(xlim = c(0, 7)) +
labs(title = 'Conformidad con el servicio de transporte desde el FNE') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggTransporte

guardarGGplot(ggTransporte, '093_TransporteProductos', 6, 4)
df %>%
select(Deptmn = Departamento_1,
Escala = col1,
Justif = col2) %>%
mutate(
Escala = factor(Escala, levels = escalaLikert),
Deptmn = str_to_title(Deptmn)) %>%
arrange(Escala) %>%
gt::gt(groupname_col = 'Escala') %>%
gt::tab_options(table.font.size = 9)
| Deptmn |
Justif |
| Muy incoforme |
| Norte De Santander |
Servientrega, ellos pagan, no les gusta el servicio de medicamento, no los enrutan bien, llegan las cajas deformadas no aseguran el medicamento. A final y a principio de año es muy tortuoso el FNE les debe 10 millones de pesos. No se ha cumplido el FNE es el que ha colocado. 2 años. |
| Tolima |
Mala experiencia en el año 2020 con la empresa de transporte. No se hizo despacho y FRE Tolima deduce una mala planificación en la contratación del transporte por parte del FNE. |
| Valle Del Cauca |
Problemas de embalaje y muchos problemas de averías |
| Cauca |
Bastantes averías |
| Algo inconforme |
| Atlántico |
El FRE aclara que últimamente las entregas son demoradas y que ha tenido que recurrir a otros convenios para poder acceder a los medicamentos. Por ejemplo, al inicio de este año se logró llevar los MME desde Bogotá, por medio del transportador de las vacunas, evitando así el riesgo de desabastecimiento que se venia presentando. |
| Magdalena |
Se expresa que al llegar lo medicamentos al FRE, no se están manejando en condiciones óptimas puesto que están llegando en el platón de una camioneta destapada sin nada que las proteja del calor y la luz solar. |
| Ni conforme ni inconforme |
| Antioquia |
Se han visto inconvenientes en la etapa de transporte de los productos ya que las condiciones de temperatura y humedad que da el intermediario pueden estar comprometiendo la estabilidad de los medicamentos. En ocasiones arriban órdenes de compra inconclusas o en distintos días de entrega, además que se afirma que el tiempo que los MME están en poder del transportador es demasiado extenso. |
| Putumayo |
El encargado del FRE no ha concebido una opinión concreta del trasportador ya que su vinculación al ente territorial se dio posterior a la última compra de MME. |
| Algo conforme |
| Córdoba |
En cuestión de 5 días llegan los pedidos. Afirman que no les ha ido mal con el transportador, y que es veloz. |
| Bolívar |
Puesto que es nuevo no tiene mucha información ni experiencias con el transportador, sin embargo, hasta ahora no se ha tenido problemas. |
| Huila |
Solo han tenido un inconveniente con el transporte de los MME, FRE Huila tuvo que ir por los medicamentos a Bogotá D.C. No obstante, FRE Huila manifiesta que con Servientrega es mucho mejor el servicio. |
| Casanare |
Una vez se notifica al FRE que los medicamentos ya se dirigen al territorio, tardan 2 días en llegar los medicamentos al FRE Casanare. |
| Quindío |
Debido a los tiempos de entrega. Son bastantes rápidos, sin embargo, hay algunos casos donde llegan algunas ampollas rotas (unidades mínimas), pero no es algo que lo justifiquen para decir que el transportador no cumple. |
| Muy conforme |
| Boyacá |
No han presentado problemas |
| Guaviare |
El FNE siempre responde y efectúa la devolución de los productos con averías. Personal del FRE, reconoce que cuando sucede esto es por una falla en el proceso de embalaje y no es responsabilidad de la empresa transportadora. |
| Nariño |
No se ha tenido inconvenientes con ningún operador, sea cual sea, siempre llegan rápido y sin inconvenientes. |
# 4.41. ¿Cuál es la frecuencia definida para el control de ------------------
# existencias de los medicamentos?
col1 <- "4.41. ¿Cuál es la frecuencia definida para el control de existencias de los medicamentos?"
col2 <- "4.42. Describa el proceso completo que hace el FRE para el control de existencias y fechas de vencimiento."
frecRevisionMed <- c("Varias veces al día",
"Diaria",
"Cada dos días",
"Cada semana",
"Cada quince días",
"Cada mes")
ggFrecControlExistencias <-
select(df, frec = col1) %>%
mutate(frec = factor(frec, rev(frecRevisionMed))) %>%
ggplot(aes(y = frec)) +
geom_bar(stat = 'count', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = ..count..), stat = 'count', hjust = -0.5) +
xlab('Frecuencia') +
scale_y_discrete(drop = FALSE) +
coord_cartesian(xlim = c(0, 7)) +
labs(title = 'Frec. de control de existencia de medicamentos MME') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggFrecControlExistencias

guardarGGplot(ggFrecControlExistencias, '094_FrecControlExistencias', 6, 4)
gmFrecControlExistencias <- df_total %>%
rename(frec = col1) %>%
left_join(colombiaGeoDF, by = c('CodigoDepartamento' = 'DPTO')) %>%
ggplot(aes(fill = frec)) +
geom_sf(aes(geometry = geometry)) +
scale_fill_brewer(palette = 'Set1', name = NULL) +
theme(axis.title.y = element_blank(),
legend.position = 'right',
axis.text = element_blank()) +
labs(title = 'Frecuencia de control de existencias')
gmFrecControlExistencias

guardarGGplot(gmFrecControlExistencias, '094_FrecControlExistenciasMapa', 6, 4)
df %>%
select(Deptmn = Departamento_1,
Frecuencia_Definida = col1,
Proceso = col2) %>%
mutate(
Deptmn = str_to_title(Deptmn)) %>%
arrange(Frecuencia_Definida) %>%
gt::gt(groupname_col = 'Frecuencia_Definida') %>%
gt::tab_options(table.font.size = 9)
| Deptmn |
Proceso |
| Cada mes |
| Atlántico |
La frecuencia con la cual se realiza el control de las existencias de los medicamentos es mensual con existencias mínimas definidas por producto, puesto que este inventario es necesario para la estimación de compra de los MME, como se explicó en el numeral de compra de MME, así mismo, también se realizan técnicas de semaforización anteriormente explicadas, al igual que técnicas de almacenamiento FEFO. |
| Magdalena |
Las existencias de medicamentos se controlan mediante libro contable y archivo en Excel. Cuando se hace recepción técnica, se observan las fechas de vencimiento, así mismo, se expresa que hay casos donde los medicamentos llegan desde el FNE con fechas próxima al vencimiento. |
| Tolima |
Encargada del FRE hace el proceso para el control de existencias y fechas de vencimiento, a través de la base de datos (Excel) que se maneja en el FRE, en el sentido de que las cantidades contadas en físico deben coincidir con las registradas en la base de datos - Excel. |
| Quindío |
El control de existencias es mensual mediante el sistema PSP el consumo promedio mensual arrojado por el software es llevado a una hoja de Excel mediante la cual se calcula los máximos y mínimos requeridos de cada MME. |
| Nariño |
El control de existencias se realiza diario y para llevar control de las fechas de vencimiento, colocan los MME con fechas lejanas de vencimiento en la parte de atrás del estante. En ocasiones, no se abren los empaques puesto que la fecha de vencimiento es lejana. |
| Cada quince días |
| Norte De Santander |
Se descarga el inventario total, tanto físico y tanto en sistema, luego se hace la cuenta, lo realiza una sola persona. |
| Huila |
Los medicamentos son ingresados al sistema de inventario, ubicado en la plataforma tecnológica interna llamada “Extranet”. Aquí se tiene información de las unidades de MME y sus fechas de vencimiento. El personal vinculado al FRE cuenta todos las cajas y unidades de MME presentes en la bodega, mientras lleva un registro en cuaderno. Este valor se corrobora con la información disponible en la plataforma “Extranet”. |
| Cada semana |
| Boyacá |
Se mira en mira en los datos arrojados por el Kardex las fechas de vencimiento y se van depurando los que ya se han vencido, se tiene especial atención con Concerta y Ritalina |
| Valle Del Cauca |
La frecuencia definida para el control de existencias de los medicamentos es semanal (Viernes), el proceso completo que hace el FRE para el control de existencias y fechas de vencimiento consta de descargar del programa el listado, conteo físico, comparación con cifras del software y reporte mensual a los ministerios |
| Putumayo |
Se hace revisión en el sistema PCT, sin embargo, el funcionario del FRE manifiesta que así se lleve un adecuado control del inventario si no se esta abasteciendo continua y efectivamente el stock de MME el proceso de control de existencias y fechas de vencimiento no es del todo eficiente. |
| Cauca |
Los productos que se vencen es porque hay mucha baja rotación |
| Diaria |
| Córdoba |
Cada vez que se entra a el programa Softmedicamentos el aplicativo indica las fechas de vencimiento próximas a vencerse. El encargado del proceso afirma que el producto metilfenidato usualmente llega al FRE para vencerse en 8 o 9 meses. A pesar de que no deberían recibirlos por su corto tiempo de vencimiento, lo hacen porque es un medicamento de alto consumo en el departamento de Córdoba. Esta como pendiente la devolución por parte del FNE metilfenidato que se les venció. |
| Antioquia |
Todos los días se hace inventario a las 7:30 am, revisando fechas de vencimiento y cada mes, los 10 primeros días de cada mes se envía informe al FNE para recambio de importados. Para los no importados se hace esa inspección desde la compra. Si la fecha de vencimiento está muy próxima se compra para un periodo menor. |
| Bolívar |
La encargada del FRE, una auxiliar y la encargada del área jurídica están presentes en el proceso de control de existencias contra la plataforma Microsoft Access. |
| Casanare |
Para el control de existencias de MME se maneja base de datos (archivo Excel), con los lotes de los medicamentos. Esta información se mantiene actualizada y se compara con las existencias mencionadas en el libro por cada medicamento. |
| Guaviare |
En la central de medicamentos se verifican existencias de los MME y esta información se compara con el contenido del libro en físico de inventario. Cada 20 días llevan a cabo la verificación exhaustiva de existencias y fechas de vencimiento. |
# 4.43. ¿Se utilizan técnicas de semaforización en el inventario? ---------------
col1 <- "4.43. ¿Se utilizan técnicas de semaforización en el inventario?"
ggTecnicasSemaforizacion <- select(df, frec = col1) %>%
table() %>% as_tibble() %>%
rename(label = '.') %>%
mutate(
prop = n/sum(n),
label1 = paste0(label, "\n", round(prop,3)*100, '%')) %>%
pieChart(prop, label1) +
theme(legend.position = 'none') +
scale_fill_brewer(palette = 'Set1') +
labs(title = "Utilización de técnicas de semaforización de inventarios")
ggTecnicasSemaforizacion

guardarGGplot(ggTecnicasSemaforizacion, '095_UsoTecnicasSemaforizacion', 6, 4)
# 4.45. ¿El FRE tiene niveles de seguridad en el inventario definidos? ------------------
col1 <- "4.45. ¿El FRE tiene niveles de seguridad en el inventario definidos?"
ggNivelSeguridad <- select(df, frec = col1) %>%
table() %>% as_tibble() %>%
rename(label = '.') %>%
mutate(
prop = n/sum(n),
label1 = paste0(label, "\n", round(prop,3)*100, '%')) %>%
pieChart(n, label1) +
theme(legend.position = 'none') +
scale_fill_brewer(palette = 'Set1') +
labs(title = "Utilización de nivel de seguridad en inventario")
ggNivelSeguridad

guardarGGplot(ggNivelSeguridad, '096_UsoNivelSeguridad', 6, 4)
# 4.49. ¿Se han presentado casos de vencimiento de medicamentos en --------------
# el almacén del FRE en los últimos 4 años?
col1 <- "4.49. ¿Se han presentado casos de vencimiento de medicamentos en el almacén del FRE en los últimos 4 años?"
ggVencimientoMed <- select(df, frec = col1) %>%
table() %>% as_tibble() %>%
rename(label = '.') %>%
mutate(
prop = n/sum(n),
label1 = paste0(label, "\n", round(prop,3)*100, '%')) %>%
pieChart(n, label1) +
theme(legend.position = 'none') +
scale_fill_brewer(palette = 'Set1') +
labs(title = "Presentación de casos de vencimiento de medicamentos en 4 años")
ggVencimientoMed

guardarGGplot(ggVencimientoMed, '097_CasosVencimiento', 6, 4)
col2 <- "Si la respuesta anterior fue Si, indique cuales...136"
ggMedicVencidos <- pull(df, col2) %>%
na.omit() %>%
separarDummies() %>%
pivot_longer(cols = everything()) %>%
mutate(
name = str_wrap(name, 30),
name = str_replace(name, 'almaceamiento', 'verificación'),
name = str_replace(name, 'institciones', 'instituciones')) %>%
group_by(name) %>%
summarise(
conteo = sum(value),
propor = sum(value)/dim(df)[1],
label1 = paste(conteo, '/', dim(df)[1])
) %>%
ggplot(aes(y = fct_reorder(name, propor), x = propor)) +
geom_bar(stat = 'identity', fill = '#6699ff', color = 'black', alpha = 0.6) +
geom_text(aes(label = label1), hjust = -0.3, size = 3) +
coord_cartesian(xlim = c(0, 1)) +
scale_x_continuous(labels = scales::percent_format()) +
xlab('Proporción (%)') +
labs(title = 'Medicamentos que se han vencido en los últimos años') +
theme(axis.title.y = element_blank(), panel.grid = element_blank())
ggMedicVencidos

guardarGGplot(ggMedicVencidos, '098_CasosVencimiento', 6, 4)
# 4.53. Brinde una estimación del número de entidades que han ------------------
# realizado compras al FRE en el último año.
col1 <- "4.53. Brinde una estimación del número de entidades que han realizado compras al FRE en el último año."
ggEntidadesCompradoras <- df %>% select(Departamento_1, col1 = col1) %>%
filter(str_detect(col1, '\\d')) %>%
mutate(Depto1 = str_to_title(Departamento_1),
col1 = as.numeric(col1),
Depto1 = fct_reorder(Depto1, col1)) %>%
ggplot(aes(y = Depto1, yend = Depto1)) +
geom_segment(aes(x = 0, xend = col1), col = "#1a41bd") +
geom_label(aes(x = col1, label = col1), size = 3, fill = "#92abfc") +
theme(axis.title.y = element_blank(), panel.grid = element_blank()) +
xlab('N.° de inscritos en el departamento')
ggEntidadesCompradoras

guardarGGplot(ggEntidadesCompradoras, '099_NEntidadesCompradoras', 6, 4)
col2 <- "NoPersonas"
ggRecursosFRE <- df_total1 %>%
filter(str_detect(col1, '\\d')) %>%
select(Departamento_1, col1 = col1, NoPersonas = col2) %>%
ungroup() %>%
mutate(Departamento_1 = str_to_title(Departamento_1),
col1 = as.numeric(col1)) %>%
ggplot(aes(x = col1, y = NoPersonas)) +
stat_smooth(method = 'lm', lty = 'dashed',
fill = 'blue1', alpha = 0.1) +
geom_point() +
geom_text_repel(aes(label = Departamento_1), size = 3) +
xlab('N.° de instituciones inscritas en el departamento') +
ylab('N.° de personas por FRE') +
theme(panel.grid = element_blank())
## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción
ggRecursosFRE
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 5 rows containing non-finite values (stat_smooth).
## Warning: Removed 5 rows containing missing values (geom_point).
## Warning: Removed 5 rows containing missing values (geom_text_repel).

guardarGGplot(ggRecursosFRE, '100_RelacionRecursosFRE', 6, 4)
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 5 rows containing non-finite values (stat_smooth).
## Warning: Removed 5 rows containing missing values (geom_point).
## Warning: Removed 5 rows containing missing values (geom_text_repel).